package com.loong.web.gp4j.dao.code;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import com.loong.web.gp4j.bean.schema.code.CodeSchema;

/**
 * 代码数据访问
 *
 * @author 张成轩
 */
@Repository
public class CodeDao {

	@Resource
	private SqlSessionTemplate template;

	/**
	 * 插入代码
	 * 
	 * @param code 代码
	 * @return 更新数量
	 */
	public int insert(CodeSchema code) {

		return template.insert("insertCode", code);
	}

	/**
	 * 更新代码
	 * 
	 * @param code 代码
	 * @return 更新数量
	 */
	public int update(CodeSchema code) {

		return template.update("updateCode", code);
	}

	/**
	 * 删除代码
	 * 
	 * @param id id
	 * @return 删除数量
	 */
	public int delete(Integer id) {

		return template.update("deleteCode", id);
	}

	/**
	 * 查询代码
	 * 
	 * @param id id
	 * @return 代码对象
	 */
	public CodeSchema get(Integer id) {

		return template.selectOne("getCode", id);
	}

	/**
	 * 通过类型查询代码
	 * 
	 * @param type 用户id
	 * @return 代码对象集
	 */
	public List<CodeSchema> getByType(String type) {

		return template.selectList("getCodeByType", type);
	}

	/**
	 * 通过类型及值查询代码
	 * 
	 * @param type 类型
	 * @param value 值
	 * @return 代码对象
	 */
	public CodeSchema getByTypeAndValue(String type, Integer value) {

		Map<String, Object> params = new HashMap<String, Object>();
		params.put("type", type);
		params.put("value", value);
		return template.selectOne("getCodeByTypeAndValue", params);
	}

	/**
	 * 通过类型查询最大排序
	 * 
	 * @param type 类型
	 * @return 最大排序
	 */
	public Integer getMaxOrderByType(String type) {

		return template.selectOne("getCodeMaxOrderByType", type);
	}

	/**
	 * 通过类型排序更新代码排序
	 * 
	 * @param type 类型
	 * @param order 排序
	 * @return 更新数量
	 */
	public Integer updateOrder(String type, Integer order) {

		Map<String, Object> params = new HashMap<String, Object>();
		params.put("type", type);
		params.put("order", order);
		return template.update("updateCodeOrder", params);
	}
}
